import validate from 'wechat-validate'

Page({
  // 注入插件
  behaviors: [validate],

  options: {
    pureDataPattern: /^_/, // 指定所有 _ 开头的数据字段为纯数据字段
  },

  data: {
    // 不支持路径双向绑定：
    // model:value="{{ form.data.mobile }}"
    // form: {
    //   data: {
    //     mobile: ''
    //   }
    // },

    _redirectURL: '/pages/my/index',
    mobile: '',
    code: '',
    timeData: {
      minutes: 0,
      seconds: 0,
    },
  },

  rules: {
    mobile: [
      { required: true, message: '请填写手机号码!' },
      { pattern: /^1[3-8]\d{9}$/, message: '请填写正确的手机号码!' },
    ],
    code: [
      { required: true, message: '请填写验证码!' },
      { pattern: /^\d{6}$/, message: '请填写正确的验证码!' },
    ],
  },

  countDownChange(e) {
    if (e.detail.minutes === 0 && e.detail.seconds === 0 && e.detail.milliseconds === 0) {
      return
    }

    this.setData({
      timeData: e.detail,
    })
  },

  async getCode() {
    // 先针对mobile做表单验证
    const { valid, message } = this.validate('mobile')

    if (!valid) return wx.utils.toast(message)

    this.setData({
      timeData: {
        minutes: 1,
        seconds: 0,
      },
    })

    const res = await wx.http({
      url: '/code',
      data: {
        mobile: this.data.mobile,
      },
    })

    // console.log('[ 验证码 ] >', res.data.code)
    this.setData({ code: res.data.code })
  },

  // 提交表单数据，完成登录/注册的功能
  async submitForm() {
    // 验证数据是否合法
    // this.validate() 验证整个表单，返回值是校验结果（boolean），内部会自动toast提示错误消息
    if (!this.validate()) return
    try {
      // 调用登录接口
      const { data } = await wx.http.post('/login', {
        mobile: this.data.mobile,
        code: this.data.code,
      })
      wx.setStorageSync('token', data)

      // 登录完成后，一定要将token数据设置到应用实例上，因为应用实例上的token是在onLaunch钩子中初始化了，此时，已经onLaunch结束了
      getApp().global.token = data

      // 要先判断this.data._redirectURL是否为tabbar页面，如果是，就用wx.switchTab跳，否则用wx.redirectTo跳
      /* global __wxConfig */
      // .slice(0, -5) => 去掉 .html 后缀
      const tarBarPagePathList = __wxConfig.tabBar.list.map((v) => v.pagePath.slice(0, -5))
      if (tarBarPagePathList.includes(this.data._redirectURL.slice(1))) {
        wx.switchTab({ url: this.data._redirectURL })
      } else {
        wx.redirectTo({ url: this.data._redirectURL })
      }
    } catch (err) {
      // toast 后面的会覆盖前面的，同一时期只会有一个toast提示
      wx.utils.toast(err.message)
    }
  },

  onLoad({ redirectURL }) {
    if (redirectURL && !redirectURL.startsWith('/')) {
      redirectURL = '/' + redirectURL
      this.setData({
        _redirectURL: redirectURL,
      })
    }
  },
})
